package prototype;

/**
 * 原型模式
 * 用于创建重复对象，同时保证性能
 * 1.原型接口Cloneable，该接口用于创建当前对象的克隆
 * 2.重写clone方法
 * 3.在重写的clone方法中，调用super.clone()，执行Object中的clone
 * 原理：将原型对象，传给发动对象，发动对象将其克隆，即对象的clone()
 * =>
 * ArrayList、HashMap实现了cloneable，实现了浅拷贝
 *
 * 优点：高效创建对象，动态获取对象的运行时状态，即克隆对象的当前状态；
 *      浅拷贝对象能够同原对象一同变化
 * 缺点：深拷贝代码复杂度高；克隆方法要单独定制，违反OCP开闭原则
 *
 */
public class PrototypeTest {
    public static void main(String[] args) throws Exception{
        ConcreatePrototype cp = new ConcreatePrototype();
        //对象复制10份
        for (int i = 0; i < 10; i++) {
            ConcreatePrototype clone = (ConcreatePrototype)cp.clone();
            clone.show();
        }
    }
}
